import { useIntersectionObserver, useIntervalFn } from '@vueuse/core'
import dayjs from 'dayjs'
import { onUnmounted, ref } from 'vue'

// 数据懒加载
export const useLazyData = (apiFn) => { // 传入api函数
  const result = ref([])
  // 创建响应式变量并return作为ref属性值
  const target = ref(null)
  // 监视是否进入可视区域
  const { stop } = useIntersectionObserver(
    // 监听的目标元素，由于是响应式所以有值，神来之笔
    target,
    // 是否进入可视区
    ([{ isIntersecting }]) => {
      if (isIntersecting) {
        // 停止监视
        stop()
        apiFn().then(data => {
          result.value = data.result
        })
      }
    },
    // 触发阈值
    {
      threshold: 0
    }
  )
  return { result, target }
}

// 倒计时
export const usePayTime = () => {
  const time = ref(0) // 倒计时秒数
  const timeText = ref('') // 倒计时文字
  const { pause, resume } = useIntervalFn(() => {
    time.value--
    timeText.value = dayjs.unix(time.value).format('mm分ss秒')
    if (time.value <= 0) {
      pause() // 停止计时器
    }
  }, 1000, false)
  onUnmounted(() => {
    pause() // 停止计时器
  })
  // 开启计时器
  function start (countdown) { // 传入总倒计时
    time.value = countdown
    timeText.value = dayjs.unix(countdown).format('mm分ss秒')
    resume()
  }
  return {
    start,
    timeText
  }
}
